package br.com.minhasfinancas.web.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

import br.com.minhasfinancas.api.manager.ContaManager;
import br.com.minhasfinancas.api.manager.UsuarioManager;
import br.com.minhasfinancas.api.model.Conta;
import br.com.minhasfinancas.fw.bean.AbstractManagedBean;
import br.com.minhasfinancas.util.ControleSessao;

@ManagedBean
@ViewScoped
public class ContaBean extends AbstractManagedBean<Conta, Long, ContaManager> {
	private static final long serialVersionUID = 1L;

	@Inject
	private ControleSessao controleSessao;

	@Inject
	private UsuarioManager usuarioManager;

	@Inject
	private ContaManager contaManager;

	private boolean negativo;

	@Override
	public String getEditView() {
		return "/cadastro.xhtml?faces-redirect=true";
	}

	@Override
	public String getListView() {
		return "/listConta.xhtml?faces-redirect=true";
	}

	@Override
	public List<Conta> handleResultList() {
		List<Conta> contaList = new ArrayList<Conta>();
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("usuario", usuarioManager.obter(controleSessao.getIdUsuario()));
		
		contaList = contaManager.findByNamedQuery(Conta.FINDBYUSUARIO, map);
		
		return contaList;
	}

	@Override
	public String persist() {
		getInstance().setUsuario(
				usuarioManager.obter(controleSessao.getIdUsuario()));
//		Map<String, Object> map = new HashMap<String, Object>();
//		map.put("usuario", getInstance().getUsuario());
//		map.put("titulo", getInstance().getTitulo());
//		Conta conta = contaManager.findOneByNamedQuery(
//				Conta.FINDBYUSUARIOTITULO, map);
//
//		if (conta != null) {
//			JSFUtil.sendWarnMessageToUser("MSG009");
//			return null;
//		}
//		
		return super.persist();
	}

	public boolean isNegativo() {
		return negativo;
	}

	public void setNegativo(boolean negativo) {
		if (negativo == true)
			getInstance().setSaldo(getInstance().getSaldo() * -1);

		this.negativo = negativo;
	}
	
	@Override
	public boolean isAutoSearch() {
		return true;
	}

}
